package com.jungle.base.word;

import com.deepoove.poi.data.RowRenderData;
import com.deepoove.poi.data.Rows;
import com.deepoove.poi.policy.AbstractRenderPolicy;
import com.deepoove.poi.policy.TableRenderPolicy;
import com.deepoove.poi.render.RenderContext;
import com.deepoove.poi.util.TableTools;
import com.deepoove.poi.util.UnitUtils;
import com.deepoove.poi.xwpf.BodyContainer;
import com.deepoove.poi.xwpf.BodyContainerFactory;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

@Slf4j
public class CustomCztTableRenderPolicy extends AbstractRenderPolicy<Object> {

    @Override
    protected void afterRender(RenderContext<Object> context) {
        // 清空标签
        clearPlaceholder(context, true);
    }

    @Override
    public void doRender(RenderContext<Object> context) throws Exception {
//        Map<String, List<YjCztjcbVo>> group = (Map<String, List<YjCztjcbVo>>) context.getData();
//        if (group == null) return;
//        Set<String> xlmcSet = group.keySet();
//        for (String xlmc : xlmcSet) {
//            XWPFRun run = context.getRun();
//            BodyContainer bodyContainer = BodyContainerFactory.getBodyContainer(run);
//
//            List<YjCztjcbVo> allCzt = group.get(xlmc);
//            XWPFTable table = bodyContainer.insertNewTable(run, 1, 3);
//            //删除多余单元格
//            table.removeRow(table.getRows().size() - 1);
//
//            run.addCarriageReturn();
//            run.addBreak();
//
//            //设置表格内容
//            List<RowRenderData> rowCzts = new ArrayList<>();
//            for (YjCztjcbVo yjCztjcb : allCzt) {
//                //添加承载体内容
//                if (yjCztjcb.getCztmc() != null && yjCztjcb.getJgxxdz() != null) {
//                    String jl = BigDecimal.valueOf(yjCztjcb.getJl()).setScale(2, RoundingMode.HALF_UP).toString();
//                    RowRenderData cztContent = Rows.of(yjCztjcb.getCztmc(), yjCztjcb.getJgxxdz(), jl)
//                            .center().create();
//                    rowCzts.add(cztContent);
//                }
//            }
//
//            RowRenderData r1 = Rows.of("受影响" + allCzt.get(0).getCztxl(), null, null).center().bgColor("d8d8d8").create();
//            RowRenderData r2 = Rows.of("名称", "地址", "距离（km）").center().bgColor("d8d8d8").create();
//            //添加固定行
//            rowCzts.add(r2);
//            rowCzts.add(r1);
//
//            // 循环插入行
//            for (RowRenderData rowCzt : rowCzts) {
//                XWPFTableRow insertNewTableRow = table.insertNewTableRow(0);
//                double[] cellWidth = {5, 5, 4.63};
//                for (int j = 0; j < 3; j++)
//                    insertNewTableRow.createCell().setWidth(UnitUtils.cm2Twips(cellWidth[j]) + "");
//                // 单行渲染
//                TableRenderPolicy.Helper.renderRow(table.getRow(0), rowCzt);
//            }
//            TableTools.mergeCellsHorizonal(table, 0, 0, 2);
//
//            //添加一个换行
//            bodyContainer.insertNewParagraph(run);
    }


        /*
        自动换行
        HSSFCellStyle cellStyle=workbook.createCellStyle();
cellStyle.setWrapText(true);
cell.setCellStyle(cellStyle);
         */

    // 1) 调用XWPFTable API操作表格
    // 2) 调用TableRenderPolicy.Helper.renderRow方法快速方便的渲染一行数据
    // 3) 调用TableTools类方法操作表格，比如合并单元格
    // ......

       /*
       TableTools.mergeCellsHorizonal(table, 0, 0, 7);//合并行
        TableTools.mergeCellsVertically(table, 0, 1, 9);//合并列


        MergeCellRule rule = MergeCellRule.builder().map(MergeCellRule.Grid.of(0, 0), MergeCellRule.Grid.of(0, 2)).build();
            TableRenderData tableRenderData = Tables.of(r1, r2).mergeRule(rule).create();
        */


//        XWPFRun run = context.getRun();
//        BodyContainer bodyContainer = BodyContainerFactory.getBodyContainer(run);
//        // 定义行列
//        int row = 10, col = 8;
//        // 插入表格
//        XWPFTable table = bodyContainer.insertNewTable(run, row, col);
//
//        // 表格宽度
//        TableTools.setWidth(table, UnitUtils.cm2Twips(14.63f) + "", null);
//        // 边框和样式
//        TableTools.borderTable(table, BorderStyle.DEFAULT);
//
//        // 1) 调用XWPFTable API操作表格
//        // 2) 调用TableRenderPolicy.Helper.renderRow方法快速方便的渲染一行数据
//        // 3) 调用TableTools类方法操作表格，比如合并单元格
//        // ......
//        TableTools.mergeCellsHorizonal(table, 0, 0, 7);
//        TableTools.mergeCellsVertically(table, 0, 1, 9);
}


